#include <stdio.h>
#include <algorithm>
#include <vector>
#include <set>

using namespace std;

class Solution {
public:
	vector<vector<int> > threeSum(vector<int> &num) {
		vector<vector<int> > rus;
        sort(num.begin(), num.end());
		set<vector<int> > dedup;
		int cur = num.size() - 1;
		for(int i = 0; i < num.size(); ++i) {
			cur = num.size() - 1;
			for(int j = i + 1; j < num.size(); ++j) {
				for(int k = cur; k > j; --k) {
					if(num[j] + num[k] + num[i] == 0) {
							vector<int> tmp;
							tmp.push_back(num[i]);
							tmp.push_back(num[j]);
							tmp.push_back(num[k]);
							//dedup.insert(tmp);
							rus.push_back(tmp);
							cur = k;
							break;
					}
				}
				while(j < num.size() - 1 && num[j + 1] == num[j]) {
					++j;
				}
			}
			while(i < num.size() - 1 && num[i + 1] == num[i]) {
				++i;
			}
		}
//		set<vector<int> >::iterator it;
//        for(it = dedup.begin(); it != dedup.end(); ++it) {
//            rus.push_back(*it);
//        }
		return rus;
	}
//    vector<vector<int> > threeSum(vector<int> &num) {
//        // Start typing your C/C++ solution below
//        // DO NOT write int main() function
//		vector<vector<int>> rus;
//        sort(num.begin(), num.end());
//		set<vector<int> > dedup;
//		for(int i = 0; i < num.size(); ++i) {
//			while(i > 0 && num[i] == num[i - 1] && num[i] != 0) {
//				++i;
//			}
//			if(num[i] < 0) {
//				for(int j = num.size() - 1;j > i; --j) {
//					for(int k = j - 1;k > i; --k) {
//						if(num[j] + num[k] + num[i] == 0) {
//							vector<int> tmp;
//							tmp.push_back(num[i]);
//							tmp.push_back(num[k]);
//							tmp.push_back(num[j]);
//							dedup.insert(tmp);
//							//rus.push_back(tmp);
//						}
//					}
//				}
//			} else if(num[i] >= 0) {
//				for(int j = i + 1; j < num.size() - 1; ++j) {
//					for(int k = j + 1; k < num.size() - 1; ++k) {
//						if(num[j] + num[k] + num[i] == 0) {
//							vector<int> tmp;
//							tmp.push_back(num[i]);
//							tmp.push_back(num[j]);
//							tmp.push_back(num[k]);
//							dedup.insert(tmp)
//						}
//					}
//				}
//			}
//		}
//		return rus;
//    }
};

int main(int argc, char *argv[])
{
	printf("Hello, world\n");
	
	return 0;
}
